package cn.ljy.mes.model;

import cn.ljy.authority.model.SysUser;
import cn.ljy.common.model.validate.AddWorkValidation;
import cn.ljy.common.model.validate.UpdateWorkValidation;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;

/**
* 智能仓储WMS-移库记录表，记录入库、出库、移库的日志。
* @TableName wms_material_inventory_detail_relocation_log
* @author ljy
* @date 20250508
*/
@ApiModel(value="移库日志")
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false,of = {"id"})
public class WmsMaterialInventoryDetailRelocationLog implements Serializable {

    @NotBlank(groups = UpdateWorkValidation.class,message="id不能为空")
    @ApiModelProperty("编号")
    private String id;
    @ApiModelProperty("物料批号")
    @NotNull(groups = AddWorkValidation.class,message="请选择要存储的物料")
    private WmsMaterialBatch materialBatch;//物料批次
    @ApiModelProperty("源库位")
    private WmsWarehouseSeat warehouseSeatOfSource;
    @ApiModelProperty("目标库位")
    private WmsWarehouseSeat warehouseSeatOfTarget;
    @ApiModelProperty("源仓库名字，作为冗余存档历史记录，与后续名字变化没关系。")
    @NotBlank(message="源仓库名不能为空")
    @Length(max= 30,message="仓库长度不能超过{max}")
    private String sourceWarehouse;
    @NotBlank(message="源库区名不能为空")
    @ApiModelProperty("源库区名字，作为冗余存档历史记录，与后续名字变化没关系。")
    @Length(max= 30,message="库区长度不能超过{max}")
    private String sourceArea;
    @NotBlank(message="源库位名不能为空")
    @ApiModelProperty("源库位名字，作为冗余存档历史记录，与后续名字变化没关系。")
    @Length(max= 30,message="源库位名长度不能超过{max}")
    private String sourceSeat;
    @ApiModelProperty("原库存的商品数量（移库前）")
    private Long sourceInventory;
    @NotBlank(message="目标仓库名不能为空")
    @ApiModelProperty("目标仓库名字，作为冗余存档历史记录，与后续名字变化没关系。")
    @Length(max= 30,message="目标仓库名长度不能超过{max}")
    private String targetWarehouse;
    @NotBlank(message="目标库区名不能为空")
    @ApiModelProperty("目标库区名字，作为冗余存档历史记录，与后续名字变化没关系。")
    @Length(max= 30,message="目标库区名长度不能超过{max}")
    private String targetArea;
    @NotBlank(message="目标库位名不能为空")
    @ApiModelProperty("目标库位名字，作为冗余存档历史记录，与后续名字变化没关系。")
    @Length(max= 30,message="目标库位名长度不能超过{max}")
    private String targetSeat;
    @ApiModelProperty("目标库存的商品数量（移库前）")
    private Long targetInventory;
    @NotNull(message="[移库数量]不能为空")
    @ApiModelProperty("移库数量")
    private Long relocationQuantity;
    @NotNull(message="[执行人,用户外键]不能为空")
    @ApiModelProperty("执行人,用户外键")
    private SysUser executor;
    @ApiModelProperty("移库原因")
    @Length(max= 255,message="移库原因不能超过255")
    private String reason;
    @ApiModelProperty("移库时间")
    private Date transferTime;

    //非数据库字段
    //如果源库位和目标库位都存在，移库;如果源库位有信息，目标库位没有信息则为出库；如果源库位不存在，目标库位存在则为入库。
    private String action;//移库动作，主要有：入库、出库、移库。业务判断：
    private String actionDescription;//描述，根据移库动作在业务层拼接结果。
}
